/**
 * @overview 折线的抽象类。。声明了一些共用的基本属性配置。定义了解析数据项的方法。
 * @component#iChart.Line
 * @extend#iChart.Chart
 */
iChart.Line = iChart.extend(iChart.Chart, {
	/**
	 * initialize the context for the line
	 */
	configure : function() {
		/**
		 * invoked the super class's configuration
		 */
		iChart.Line.superclass.configure.call(this);

		this.type = 'line';

		this.dataType = 'simple';

		this.set({
			/**
			 * @cfg {Number} 线段的粗细，组件中context的linewidth属性的大小。(默认为1)
			 */
			brushsize : 1,
			/**
			 * @cfg {Object} 坐标系的配置项。请参考<link>iChart.Coordinate2D</link>
			 */
			coordinate : {
				axis:{
					width:[0,0,2,2]
			 	}
			},
			/**
			 * @cfg {Function} 当有多条线段(数据)时，可以利用tipMocker将tip整合到一起。作为一个<link>iChart.Tip</link>展示出来。tipMocker是个很实用的配置。需要掌握。(默认为null)
			 * @paramter Array tips 线段的提示文本的数组
			 * @paramter int i 数据点的索引
			 * @return String 整合后的文本
			 */
			tipMocker:null,
			/**
			 * @cfg {Number(0.0~1.0)} 如果为null，则整合后的tip的位置会根据多个数据点的位置计算。你也可以指定一个0-1的数字，0表示最上方，1表示最下方。来设置一个固定的位置。(默认为null)
			 */
			tipMockerOffset:null,
			/**
			 * @cfg {Object} 十字线的配置(默认的enable为false).请参考<link>iChart.CrossHair</link>
			 * 说明:
			 * 1.此配置有一个额外的属性enable表示是否开去十字线(默认为false)
			 * 2.此配置会自动覆盖coordinate中的crosshair配置。配置十字线应该用此配置。
			 */
			crosshair : {
				enable : false
			},
			/**
			 * @cfg {String} 值刻度的对齐方式。如果自定义了坐标系的刻度轴，则会覆盖此配置。(默认为'left')
			 * 可选值：
			 * @Option 'left'
			 * @Option 'right'
			 */
			scaleAlign : 'left',
			/**
			 * @cfg {String} 文本标签的对齐方式。如果自定义了坐标系的刻度轴，则会覆盖此配置。(默认为'bottom')
			 * 可选值：
			 * @Option 'top,'bottom'
			 */
			labelAlign : 'bottom',
			/**
			 * @cfg {Array} 刻度水平轴的文本标签集合。(默认为[])
			 */
			labels : [],
			/**
			 * @inner {Number} the distance of column's bottom and text.(default to 6)
			 */
			label_space : 6,
			/**
			 * @inner {Boolean} if the point are proportional space.(default to true)
			 */
			proportional_spacing : true,
			/**
			 * @inner {Number} the space of each label
			 */
			label_spacing : 0,
			/**
			 * @cfg {<link>iChart.LineSegment</link>} 单个线段的配置项。
			 */
			sub_option : {},
			/**
			 * {Object} 图例的配置项。请参考<link>iChart.Legend</link>
			 */
			legend : {
				sign : 'round-bar',
				sign_size : 14
			},
			/**
			 * @cfg {<link>iChart.Text</link>} 线性图坐标轴下方的标签文本的配置项。
			 */
			label:{}
		});

		this.registerEvent(
		/**
		 * @event 解析数据项时触发，返回值将覆盖当前值。
		 * @paramter object#data 数据项对象
		 * @paramter int#x 点x轴坐标
		 * @paramter int#y 点y轴坐标
		 * @paramter int#index 点的index
		 * @return Object object:
		 * @property text 点的文本
		 * @property x 点x轴坐标
		 * @property y 点y轴坐标
		 */
		'parsePoint');

		this.lines = [];
	},
	/**
	 * @method 获取坐标系对象
	 * @return <link>iChart.Coordinate2D</link>
	 */
	getCoordinate:function(){
		return this.coo;
	},
	doConfig : function() {
		iChart.Line.superclass.doConfig.call(this);

		/**
		 * apply the coordinate feature
		 */
		iChart.Interface.coordinate.call(this);

		this.push('line_start', (this.get('coordinate.width') - this.get('coordinate.valid_width')) / 2);
		this.push('line_end', this.get('coordinate.width') - this.get('line_start'));

		if (this.get('proportional_spacing'))
			this.push('label_spacing', this.get('coordinate.valid_width') / (this.get('maxItemSize') - 1));

		this.push('segment.originx', this.get('originx') + this.get('line_start'));

		/**
		 * y also has line_start and line end
		 */
		this.push('segment.originy', this.get('originy') + this.get('coordinate.height'));

		this.push('segment.width', this.get('coordinate.valid_width'));
		this.push('segment.height', this.get('coordinate.valid_height'));

		this.push('segment.limit_y', this.data.length > 1);

		this.push('segment.keep_with_coordinate', this.data.length == 1);

		var single = this.data.length == 1, self = this;
		
		if (this.get('coordinate.crosshair.enable')) {
			this.push('coordinate.crosshair.hcross', single);
			this.push('coordinate.crosshair.invokeOffset', function(e, m) {
				var r = self.lines[0].isEventValid(e);
					/**
					 * TODO how fire muti line?
					 */
					return r.valid ? r : false;
				});
		}
		
		/**
		 * quick config to all linesegment
		 */
		iChart.apply(this.get('segment'), iChart.clone(['shadow', 'shadow_blur', 'shadow_offsetx', 'shadow_offsety', 'gradient', 'color_factor','tip'], this.options));
		
	}

});// @end
